import os

from django.conf import settings
from django.shortcuts import render

# Create your views here.
from django.template import loader
from django.views import View

from .models import GoodsChannel, ContentCategory, Content

from django.http import JsonResponse




def generate_static_index_html():
    # 中间表查询集合
    goods_model_list = GoodsChannel.objects.all().order_by('group','sequence')
    categories = {}
    # 一级分类
    for good_model in goods_model_list:

        if good_model.group_id not in categories.keys():
            # 分组 最外层key
            categories[good_model.group_id] = {'channels':[],
                                            'sub_cats':[]}
        #     添加一级分类的信息
        categories[good_model.group_id]['channels'].append({
            'id': good_model.id,
            'name': good_model.category.name,
            'url': good_model.url
        })
        # 二级分类的查询集
        goods_model2 = good_model.category.subs.all()
        for good_model2 in goods_model2:
            # 三级分类
            goods_model3 = good_model2.subs.all()
            for good_model3 in goods_model3:
                sub_cats = []
                sub_cats.append({
                    'id':good_model3.id,
                    'name':good_model3.name
                })
            categories[good_model.group_id]['sub_cats'].append({
                'id':good_model2.id,
                'name':good_model2.name,
                'sub_cats':sub_cats
            })
    # =====================生成首页广告部分数据=======================
    # 我们定义一个字典, 里面将要存储广告内容部分:
    contents = {}
    # 从 ContentCategory 模型类中获取所有数据, 存放到 content_categories 中:
    content_categories = ContentCategory.objects.all()
    # 遍历刚刚获取的所有数据: 拿到每一个广告分类 cat:
    for cat in content_categories:
        # 根据广告分类的 外键反向
        # 获取广告内容中状态为 True 并且按 sequence 排序的部分,
        # 赋值给上面定义的字典, 快捷键(cat.key) 作为 key, 排序的部分作为value
        contents[cat.key] = Content.objects.filter(category=cat,
                                                   status=True).order_by('sequence')

    # 第二部分: 模板渲染部分:
    # 把上面两部分获取的有序字典和字典作为变量,拼接新的字典 context
    context = {
        'categories': categories,
        'contents': contents
    }

    # =====================获取模板,把数据添加进去生成页面====================
    # 根据导入的 loader 获取 'index.html' 模板
    template = loader.get_template('index.html')

    # 拿到模板, 然后将 context 渲染到模板中, 生成渲染过的模板
    html_text = template.render(context)

    # 我们拼接新的 index.html 模板将要生成的所在地地址:
    file_path = os.path.join(settings.GENERATED_STATIC_HTML_FILES_DIR, 'index.html')


    # 以写的权限,将渲染过的模板重新生成, 写入到文件中.
    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(html_text)

